package org.xjtu.weteam.common.config;

import org.springdoc.core.customizers.OpenApiCustomizer;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.servers.Server;

import java.util.List;

/**
 * 访问 http://localhost:8080/swgagger-ui/index.html 有惊喜
 * @author Kevin
 */
@Configuration
public class OpenApiConfig {

    // OpenAPI类用于定制全局文档信息
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                // 定制文档基本信息
                .info(new Info()
                        //关于文档信息
                        .title("西安交通大学 WeTeam 项目组提供的 RESTful API")
                        .description("你说的对，但是 WeTeam 是一款由是由 WeTeam 项目组自主研发的一款全新开放世界冒险游戏。故事发生在一个被称作「XJTU」的幻想世界，在这里，被「老师」选中的人将被授予「组长の责任」，导引项目之力。你将扮演一位名为「」的神秘角色，在「快乐的」各个项目中邂逅性格各异、能力独特的同伴们，和他们一起击败DDL，找回失散的假期——同时，逐步发掘「XJTU」的真相。")
                        .version("1.0.0")
                        .termsOfService("https://example.com/terms")//这边回头放gitee链接？？

                        //关于作者
                        .contact(new Contact()
                                .name("Kevin")
                                .url("https://gitee.com/Kevin549959703")
                                .email("549959703@qq.com"))

                        //关于许可证
                        .license(new License()
                                .name("Apache 2.0 许可协议")
                                .url("https://www.apache.org/licenses/LICENSE-2.0.html")))

                //配置服务器信息
                .servers(List.of(
                        new Server().url("http://localhost:8080").description("本地服务器"),
                        new Server().url("https://api.example.com").description("生产服务器")));
    }

    // GroupedOpenApi类用于API分组
    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .group("public")
                .pathsToMatch("/api/**")
                .build();
    }

    // OpenApiCustomizer类用于自定义OpenAPI对象，比如全局添加头部信息。
    @Bean
    public OpenApiCustomizer customerGlobalHeaderOpenApiCustomizer() {
        return openApi -> openApi.info(
                new Info().title("自定义 API 文档")
                        .description("自定义 API 文档描述")
                        .version("1.0.0")
        );
    }
}
